// 1. 预加载 views 目录下所有 .vue 组件（关键：Vite 会静态分析此路径）
const modules = import.meta.glob('@/views/**/*.vue');

// 2. 加载组件的工具函数（通过路径匹配预加载的组件）
const loadView = (viewPath) => {
  // 遍历预加载的组件，匹配路径（如 "system/menu/list" 对应 @/views/system/menu/list.vue）
  for (const path in modules) {
    // 提取路径中 "views/" 后面的部分（去掉 ".vue" 后缀）
    const matchedPath = path.split('views/')[1].replace('.vue', '');
    if (matchedPath === viewPath) {
      // 返回组件的导入函数（Vite 支持的动态导入格式）
      return modules[path];
    }
  }
  // 未找到组件时的容错处理
  console.error(`未找到组件: ${viewPath}`);
  return () => import('@/views/error/404.vue'); // 可替换为你的 404 组件路径
};

// 3. 转换后端路由为 Vue Router 格式（核心修改）
export function transformRoutes(routes) {
  return routes.map(route => {
    const transformedRoute = {
      path: route.path,
      name: route.name,
      hidden: route.hidden,
      alwaysShow: route.alwaysShow,
      meta: {
        title: route.meta?.title,
        icon: route.meta?.icon,
        tname: route.meta?.tname
      },
    };
    // 处理组件（关键：使用 loadView 加载普通组件，直接绑定特殊组件）
    if (route.component) {
      // 特殊组件：Layout（直接绑定布局组件）
      if (route.component !== 'Layout') {
        transformedRoute.component = loadView(route.component);
      }else{
        transformedRoute.component = () => import('@/layout/index.vue')
      }
    }
    // 处理子路由（递归转换）
    if (route.children && route.children.length > 0) {
      transformedRoute.children = transformRoutes(
        route.children.map(child => ({
          ...child,
          path: child.path.startsWith('/') ? child.path.slice(1) : child.path // 修复子路由路径
        }))
      );
    }

    return transformedRoute;
  });
}

// 4. 添加动态路由到 Layout 子路由（保持不变，确保逻辑正确）
export function addDynamicRoutes(router, routes) {
  routes.forEach(route => {
    router.addRoute(route);
  });
  router
  .addRoute({
    path: '/:pathMatch(.*)*thMatch(.*)*',
    name: 'NotFound',
    component: () => import('@/views/error/404.vue')
  })
}